﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using ProyectoBastanteo.Dominio;
using System.Data.SqlClient;

namespace ProyectoBastanteo.Persistencia
{
    public class BastanteoDAO
    {
        private ClienteDAO  clientedao = new ClienteDAO();
        private PoderesDAO Poderdao = new PoderesDAO();

        
        public ProyectoBastanteo.Dominio.Bastanteo Crear(ProyectoBastanteo.Dominio.Bastanteo BastanACrear)
        {
            //int nuevoCodigo = ObtenerNuevoCodigo();
            string sentencia = "INSERT INTO Bastanteo VALUES (@codclie, @grubast, @codpod, @tipoint, @importe, @fecvenc)";
            using (SqlConnection conexion = new SqlConnection(Coneccion.ObtenerCadena()))
            {
                conexion.Open();
                using (SqlCommand comando = new SqlCommand(sentencia, conexion))
                {
                    comando.Parameters.Add(new SqlParameter("@codclie", BastanACrear.codclie.codclie));
                    comando.Parameters.Add(new SqlParameter("@grubast", BastanACrear.grubast ));
                    comando.Parameters.Add(new SqlParameter("@codpod", BastanACrear.codpode.codpod));
                    comando.Parameters.Add(new SqlParameter("@tipoint", BastanACrear.tipoint));
                    comando.Parameters.Add(new SqlParameter("@importe", BastanACrear.importe));
                    comando.Parameters.Add(new SqlParameter("@fecvenc", BastanACrear.fecvenc));
                    
                    comando.ExecuteNonQuery();
                }
            }
            return BastanACrear;
        }


        public ProyectoBastanteo.Dominio.Bastanteo Obtener(Cliente ocliente, string grupo, Poderes opoder)
        {
            ProyectoBastanteo.Dominio.Bastanteo BastanExistente = null;
            string sentencia = "SELECT * FROM Bastanteo WHERE codclie=@codigo and grubast=@grupo and codpod=@poder";
            using (SqlConnection conexion = new SqlConnection(Coneccion.ObtenerCadena()))
            {
                conexion.Open();
                using (SqlCommand comando = new SqlCommand(sentencia, conexion))

                {
                    comando.Parameters.Add(new SqlParameter("@codigo", ocliente.codclie));
                    comando.Parameters.Add(new SqlParameter("@grupo", grupo));
                    comando.Parameters.Add(new SqlParameter("@poder", opoder.codpod));


                    SqlDataReader resultado = comando.ExecuteReader();
                    if (resultado.Read())
                    {
                        BastanExistente = new Bastanteo();
                        BastanExistente.codclie = clientedao.Obtener(int.Parse(resultado["codclie"].ToString()));
                        BastanExistente.grubast = (string)resultado["grubast"];
                        BastanExistente.codpode = Poderdao.Obtener((string)resultado["codpod"]);
                        BastanExistente.tipoint = (string)resultado["tipoint"];
                        BastanExistente.importe = float.Parse(resultado["importe"].ToString());
                        BastanExistente.fecvenc = DateTime.Parse(resultado["fecvenc"].ToString());
                       
                    }
                }
            }
            return BastanExistente;
        }

        public ProyectoBastanteo.Dominio.Bastanteo Modificar(ProyectoBastanteo.Dominio.Bastanteo BastanteoAModificar)
        {
            string sentencia = "UPDATE Bastanteo SET tipoint=@tipo, importe=@importe, fecvenc=@fecha WHERE codclie=@codigo and grubast=@grupo and codpod=@poder";
            using (SqlConnection conexion = new SqlConnection(Coneccion.ObtenerCadena()))
            {
                conexion.Open();
                using (SqlCommand comando = new SqlCommand(sentencia, conexion))
                {
                    comando.Parameters.Add(new SqlParameter("@codigo", BastanteoAModificar.codclie.codclie ));
                    comando.Parameters.Add(new SqlParameter("@grupo", BastanteoAModificar.grubast ));
                    comando.Parameters.Add(new SqlParameter("@poder", BastanteoAModificar.codpode.codpod ));
                    comando.Parameters.Add(new SqlParameter("@tipo", BastanteoAModificar.tipoint ));
                    comando.Parameters.Add(new SqlParameter("@importe", BastanteoAModificar.importe ));
                    comando.Parameters.Add(new SqlParameter("@fecha", BastanteoAModificar.fecvenc ));
                    comando.ExecuteNonQuery();
                }
            }
            return Obtener(BastanteoAModificar.codclie, BastanteoAModificar.grubast, BastanteoAModificar.codpode);
        }


        public void Eliminar(ProyectoBastanteo.Dominio.Bastanteo BastanteoAEliminar)
        {
            string sentencia = "DELETE FROM Bastanteo WHERE codclie=@codigo and grubast=@grupo and codpod=@poder";
            using (SqlConnection conexion = new SqlConnection(Coneccion.ObtenerCadena()))
            {
                conexion.Open();
                using (SqlCommand comando = new SqlCommand(sentencia, conexion))
                {
                    comando.Parameters.Add(new SqlParameter("@codigo", BastanteoAEliminar.codclie.codclie));
                    comando.Parameters.Add(new SqlParameter("@grupo", BastanteoAEliminar.grubast));
                    comando.Parameters.Add(new SqlParameter("@poder", BastanteoAEliminar.codpode.codpod));
                    comando.ExecuteNonQuery();
                }
            }
        }

       
        public ICollection<ProyectoBastanteo.Dominio.Bastanteo> ListarTodos()
        {
            ICollection<Bastanteo> lista = new List<Bastanteo>();
            Bastanteo BastanteoExistente = null;
            string sentencia = "SELECT * FROM Bastanteo";
            using (SqlConnection conexion = new SqlConnection(Coneccion.ObtenerCadena()))
            {
                conexion.Open();
                using (SqlCommand comando = new SqlCommand(sentencia, conexion))
                {
                    SqlDataReader resultado = comando.ExecuteReader();
                    while (resultado.Read())
                    {
                        BastanteoExistente = new Bastanteo();
                        BastanteoExistente.codclie = clientedao.Obtener(int.Parse(resultado["codclie"].ToString())); 
                        BastanteoExistente.grubast = (string)resultado["grubast"];
                        BastanteoExistente.codpode = Poderdao.Obtener((string)resultado["codpod"]); //(Poderes)resultado["codpod"];
                        BastanteoExistente.tipoint = (string)resultado["tipoint"];
                        BastanteoExistente.importe = float.Parse(resultado["importe"].ToString());
                        BastanteoExistente.fecvenc = DateTime.Parse(resultado["fecvenc"].ToString());
                        
                        lista.Add(BastanteoExistente);
                    }
                }
            }
            return lista;
        }


        public Bastanteo ObtenerPorDup(int cliente, string grupo, string poder, string inter)
        {
            Bastanteo BastanteoHallado = null;
            string sentencia = "SELECT * FROM Bastanteo WHERE codclie=@cliente and grubast=@grubast and codpod=@poder";
            using (SqlConnection conexion = new SqlConnection(Coneccion.ObtenerCadena()))
            {
                conexion.Open();
                using (SqlCommand comando = new SqlCommand(sentencia, conexion))
                {
                    comando.Parameters.Add(new SqlParameter("@cliente", cliente ));
                    comando.Parameters.Add(new SqlParameter("@grubast", grupo));
                    comando.Parameters.Add(new SqlParameter("@poder", poder));
                    comando.Parameters.Add(new SqlParameter("@inter", inter));
                    SqlDataReader resultado = comando.ExecuteReader();
                    if (resultado.Read())
                    {
                        BastanteoHallado = new Bastanteo();
                        BastanteoHallado.codclie = clientedao.Obtener(int.Parse(resultado["codclie"].ToString()));
                        BastanteoHallado.grubast = (string)resultado["grubast"];
                        BastanteoHallado.codpode = Poderdao.Obtener((string)resultado["razclie"]);
                        BastanteoHallado.fecvenc = DateTime.Parse(resultado["fecini"].ToString());
                        BastanteoHallado.importe = float.Parse(resultado["importe"].ToString());
                        BastanteoHallado.tipoint = (string)resultado["tipoint"];

                        //oTipo = tipoEmpresaDAO.Obtener(int.Parse(resultado["tipclie"].ToString()));
                        //BastanteoHallado.tipclie = oTipo;
                        //BastanteoHallado.nroempl = int.Parse(resultado["nroempl"].ToString());

                    }
                }
            }
            return BastanteoHallado;
        }

        //public Boolean ObtenerPod(Poderes opoder)
        //{
        //    Boolean existe = false;
        //    string sentencia = "SELECT * FROM Bastanteo WHERE codpod=@poder";
        //    using (SqlConnection conexion = new SqlConnection(Coneccion.ObtenerCadena()))
        //    {
        //        conexion.Open();
        //        using (SqlCommand comando = new SqlCommand(sentencia, conexion))
        //        {
                    
        //            comando.Parameters.Add(new SqlParameter("@poder", opoder.codpod));
        //            SqlDataReader resultado = comando.ExecuteReader();
        //            if (resultado.Read())
        //            {
        //                BastanExiste = new Bastanteo();
        //                BastanExiste.codclie = clientedao.Obtener(int.Parse(resultado["codclie"].ToString()));
        //                BastanExiste.grubast = (string)resultado["grubast"];
        //                BastanExiste.codpode = Poderdao.Obtener((string)resultado["codpod"]);
        //                BastanExiste.tipoint = (string)resultado["tipoint"];
        //                BastanExiste.importe = float.Parse(resultado["importe"].ToString());
        //                BastanExiste.fecvenc = DateTime.Parse(resultado["fecvenc"].ToString());

        //            }
        //        }
        //    }
        //    return existe;
        //}
    }
}